/*
    created: 2023/4/11
    filename: seqstack.c
    author： 李东霖
    purpose： 使用静态数组实现顺序栈

*/

#include"seqstack.h"
//初始化  
void InitStack(PSeqStack s)
{
    ClearStack(s);
}
//销毁栈 
void DistroyStack(PSeqStack s)
{
    ClearStack(s);
}

//清空栈 
void ClearStack(PSeqStack s)
{
    if(s == NULL) return;
    s->top = -1;
    memset(&s->data,0,sizeof(ElemType)*MAXSIZE);
}

//判断栈空 返回值 1-空 0-非空 -1-传入栈是空的
int StackEmpty(PSeqStack s)
{
    if(s == NULL) return -1;
    return s->top == -1;
}
//判断栈满 返回值 1-满 0-非满 -1-传入栈是空的
int StackFull(PSeqStack s)
{
    if(s == NULL) return -1;
    return s->top == MAXSIZE-1;   
}
//将元素压入栈顶 返回值 1-成功 0-失败 -1-传入栈是空的
int Push(PSeqStack s,ElemType *e)
{
    if(s == NULL) return -1;
    if(0 == StackFull(s))
    {
        memcpy(s->data+(++s->top),e,sizeof(ElemType));
        return 1;
    }
    return 0;
}
//将栈顶元素出栈存放到e中  返回值 1-成功 0-失败 -1-传入栈是空的
int Pop(PSeqStack s,ElemType *e)
{
    if(NULL == s) return -1;
    if(0 == StackEmpty(s))
    {
       memcpy(e,s->data+(s->top--),sizeof(ElemType));
       return 1; 
    }
    return 0;
}
//得到栈顶元素  
int GetTop(PSeqStack s,ElemType *e)
{
    if(NULL == s) return -1;
    if(0 == StackEmpty(s))
    {
       memcpy(e,s->data+(s->top),sizeof(ElemType)); 
       return 1;
    }   
    return 0;
}